package com.atguigu.java.ai.langchain4j.tools;

import com.atguigu.java.ai.langchain4j.entity.Appointment;
import com.atguigu.java.ai.langchain4j.service.AppointmentService;
import dev.langchain4j.agent.tool.P;
import dev.langchain4j.agent.tool.Tool;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
 * @Author: YBW
 * @Date: 2025/9/5 11:17
 * @Description:
 **/
@Component
public class AppointmentTools {

    @Autowired
    private AppointmentService appointmentService;

    @Tool(name = "预约挂号",value = "根据参数，先执行工具方法queryDepartment查询是否可预约，并直接给用户回答是否可预约，并让用户确认所有预约信息，用户确认后再进行预约。" +
            "如果用户没有提供具体的医生姓名，请从向量存储中找到一位医生。")
    private String bookAppointment(Appointment appointment){

        Appointment getone = appointmentService.getone(appointment);
        if(getone != null){
            return "您在相同的科室和时间已有预约";
        }

        boolean save = appointmentService.save(appointment);
        if(save){
            return "预约成功";
        }else {
            return "预约失败";
        }
    }

    @Tool(name = "取消预约挂号",value = "根据参数，查询预约是否存在，如果存在则删除预约记录并返回取消预约成功，否则返回取消预约失败")
    private String cancelAppointment(Appointment appointment){

        Appointment getone = appointmentService.getone(appointment);
        if(getone == null){
            return "您没有预约记录，请核对预约科室和时间";
        }

        boolean b = appointmentService.removeById(appointment);
        if(b){
            return "取消成功";
        }else {
            return "取消失败";
        }
    }

    @Tool(name = "查询是否有号源",value = "根据科室名称，日期，时间和医生查询是否有号源，并返回给用户")
    private boolean queryDepartment(
            @P(value = "科室名称") String name,
            @P(value = "日期") String date,
            @P(value = "时间，可选值：上午、下午") String time,
            @P(value = "医生名称", required = false) String doctorName
    ){
        return true;
    }
}
